1. Technical Field
The present invention relates to data storage systems in general, and in particular to controllers within data storage systems. Still more particularly, the present invention relates to a controller for controlling data storage within a data storage system.
2. Description of Related Art
A data processing system typically includes a processor subsystem having at least one central processing unit (CPU), an input/output (I/O) subsystem, a memory subsystem and a bus subsystem. The memory subsystem of the data processing system typically includes a data storage system having a controller connected to a back end storage. The controller controls the flow of data between the data processing system and the back end storage. The controller includes a cache memory that is typically implemented by static memories. During operation, the cache memory serves as a temporary store for data associated with a write I/O request.
Some controllers have two cache memories. The two cache memories can be operated in a flip-flop manner in which one cache memory is being loaded with data from the data processing system while the other cache memory flushes data to the back end storage. Alternatively, the two cache memories can be operated in a mirrored manner in which each cache memory stores a copy or image of the data before the acknowledgement is returned to the data processing system. The two cache memories are designed so that the risk of failure of or loss of access to both images is minimized.
For the most part, prior art data storage systems do not readily meet the increasingly stringent reliability demands and failure tolerances imposed by many software applications. In particular, responses to I/O requests in such data storage systems can be poorly defined in the wake of a failure that disrupts the processing of I/O requests. Accordingly, it would be desirable to improve the failure tolerance of data storage systems without compromising reliability and data availability.